package main

import "fmt"

func main() {
	/*
		可变参数(不定参数)：
			概念：一个函数的参数的类型确定，但是个数不确定，就可以使用可变参数。

			语法：
				参数名 ... 参数的类型

				对于函数，可变参数相当于一个切片
				调用函数的时候，可以传入 0 ~ 多个参数

				Println(), Printf(), Print()
				append()
			注意事项：
				A：如果一个函数的参数是可变参数，同时还有其他的参数，
					可变参数要放在参数列表的最后
				B：一个函数的参数列表中最多只能有一个可变参数
				C：向可变参数传入一个切片类型的实参，需要在切片名后面加上“...”
				D：数组不能作为实参传递给不定参数（例如：append 函数）
				E:一个函数所有的不定参数的类型都相同
	*/
	//1.求和
	getSum3()
	getSum3(1, 2, 3, 4, 5, 6, 7, 8, 9)

	s1 := []int{1, 2, 3, 7, 4, 5, 6}
	getSum3(s1...) //传入切片需要加上“...”

	fun2(19, 23, "喜羊羊最帅", 1, 4, 2, 3, 6, 7, 10)
}

func getSum3(nums ...int) { //nums 相当于一个切片
	fmt.Printf("%T\n", nums) // []int
	sum := 0
	for i := 0; i < len(nums); i++ {
		sum += nums[i]
	}
	fmt.Println(sum)
}

func fun2(a, b int, s string, nums ...int) {
	fmt.Println(a, b, s, nums)
}
